package com.sc.sc250601.cook.util;

import com.sc.sc250601.cook.mapper.PostMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
public class ViewCountSyncTask {

    @Autowired
    private StringRedisTemplateUtil redisUtil;
    @Autowired
    private PostMapper postMapper;

    // 每5分钟同步一次（cron表达式：秒 分 时 日 月 周）
    @Scheduled(cron = "0 0/5 * * * ?")
    public void syncViewCountToDb() {
        // 1. 匹配所有浏览量键（post:view:count:*）
        Set<String> keys = redisUtil.keys("post:view:count:*");
        if (keys == null || keys.isEmpty()) {
            return;
        }

        // 2. 批量处理每个键
        for (String key : keys) {
            // 提取postId（从key中截取，如"post:view:count:46" → 46）
            Long postId = Long.parseLong(key.split(":")[3]);
            // 获取Redis中的计数
            Long viewCount = redisUtil.getObject(key, Long.class);
            if (viewCount == null) {
                continue;
            }

            // 3. 同步到数据库（更新帖子的viewCount字段）
            postMapper.updateViewCount(postId, viewCount);
            // 可选：同步后不清空Redis（保持缓存，下次继续累加）
        }
    }
}
